package com.xbongbong.saas.service;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailAddTeamGroupDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailChangeMainDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailCoAddDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailCoDelDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailDisbandTeamDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailEditLabelDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailMainAddDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailMainDelDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailRenameDTO;
import com.xbongbong.pro.detailtab.dto.team.TeamDetailUpdateDTO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailAddTeamGroupVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailChangeMainVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailCoAddVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailCoDelVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailDisbandTeamVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailEditCoPerVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailEditLabelVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailMainAddVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailMainDelVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailRenameVO;
import com.xbongbong.pro.detailtab.vo.team.TeamDetailVO;

/**
 * @author: 汪腾伟
 * @date: Created in 2021/12/23 18:35
 * @description： 针对详情页的团队的Service层
 */
public interface TeamDetailService {

    /**
     * 详情页的团队信息，之所以返回是一个Object，是因为目前返回需要分隔离和共享。
     * 隔离和共享需要返回的东西有差，下面有两个用来接收返回的实体，所以统一用Object返回
     *
     * @param teamDetailDTO
     * @return
     */
    TeamDetailVO teamDetail(TeamDetailDTO teamDetailDTO) throws XbbException;


    /**
     * 编辑协同人权限
     *
     * @param teamDetailUpdateDTO
     * @return
     * @throws XbbException
     */
    TeamDetailEditCoPerVO editCoPermission(TeamDetailUpdateDTO teamDetailUpdateDTO) throws XbbException;

    /**
     * 解散团队
     *
     * @param teamDetailDisbandTeamDTO
     * @return
     */
    TeamDetailDisbandTeamVO disbandTeam(TeamDetailDisbandTeamDTO teamDetailDisbandTeamDTO) throws XbbException;

    /**
     * 修改团队名称
     *
     * @param teamDetailRenameDTO 修改团队名称入参实体
     * @return
     */
    TeamDetailRenameVO renameTeam(TeamDetailRenameDTO teamDetailRenameDTO) throws XbbException;

    /**
     * 编辑团队成员标签
     *
     * @param teamDetailEditLabelDTO 编辑团队成员标签的接收实体
     * @return
     */
    TeamDetailEditLabelVO editLabel(TeamDetailEditLabelDTO teamDetailEditLabelDTO) throws XbbException;

    /**
     * 团队详情新增团队
     *
     * @param teamDetailAddTeamGroupDTO 团队详情新增团队接收实体
     * @return
     */
    TeamDetailAddTeamGroupVO addTeamGroup(TeamDetailAddTeamGroupDTO teamDetailAddTeamGroupDTO) throws XbbException;

    /**
     * 负责人新增逻辑（目前只存在共享模式下）
     *
     * @param teamDetailMainAddDTO
     * @return
     */
    TeamDetailMainAddVO mainAdd(TeamDetailMainAddDTO teamDetailMainAddDTO) throws XbbException;

    /**
     * 替换负责人
     *
     * @param teamDetailChangeMainDTO
     * @return
     */
    TeamDetailChangeMainVO changeMain(TeamDetailChangeMainDTO teamDetailChangeMainDTO) throws XbbException;

    /**
     * 删除负责人
     *
     * @param teamDetailMainDelDTO
     * @return
     */
    TeamDetailMainDelVO mainDel(TeamDetailMainDelDTO teamDetailMainDelDTO) throws XbbException;

    /**
     * 删除协同人
     *
     * @param teamDetailCoDelDTO
     * @return
     */
    TeamDetailCoDelVO coDel(TeamDetailCoDelDTO teamDetailCoDelDTO) throws XbbException;

    /**
     * 新增协同人
     *
     * @param teamDetailCoAddDTO
     * @return
     * @throws XbbException
     */
    TeamDetailCoAddVO coAdd(TeamDetailCoAddDTO teamDetailCoAddDTO) throws XbbException;
}
